//
//  netWorkHandler.m
//  ui18 _网络请求
//
//  Created by lirui on 15/12/31.
//  Copyright © 2015年 www.lanou3g.com蓝鸥科技. All rights reserved.
//

#import "netWorkHandler.h"

@implementation netWorkHandler

+(void)GETWithURL:(NSString *)str completion:(NETBLOCK)netBlock
{
    //中文转码
    NSString *urlStr =[ str stringByAddingPercentEncodingWithAllowedCharacters:[ NSCharacterSet characterSetWithCharactersInString:str]];
   //string->url
    NSURL *url =[ NSURL URLWithString:urlStr];
    //创建request
    //参数1:request
    //参数2:缓存
    //参数3:超时控制
    NSURLRequest *req =[ NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
    //
    NSURLSession *session =[ NSURLSession sharedSession];
    NSURLSessionDataTask *task =[ session dataTaskWithRequest:req completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            //JSON解析中data不能为nil
            if (error) {
                NSLog(@"错误信息 %@", error);
            }else {
                //json解析
                NSError *jError = nil;
                id result =[ NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&jError];
                if (jError) {
                    NSLog(@"解析错误: %@", jError);
                }else{
                    //像外部返回json数据
                    
                    netBlock(result);
                }
            }
        });
    }];
    [task resume];
}
+(void)POSTWithURL:(NSString *)str body:(NSData *)body completion:(NETBLOCK)netBlock
{
    //中文转码
    NSString *urlStr =[ str stringByAddingPercentEncodingWithAllowedCharacters:[ NSCharacterSet characterSetWithCharactersInString:str]];
    //string->url
    NSURL *url =[ NSURL URLWithString:urlStr];
    //创建request
    //参数1:request
    //参数2:缓存
    //参数3:超时控制
    NSMutableURLRequest *req =[ NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
    //post
    req.HTTPMethod = @"POST";
    //body
    req.HTTPBody = body;
    //session
    NSURLSession *session =[ NSURLSession sharedSession];
    NSURLSessionDataTask *task =[ session dataTaskWithRequest:req completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            //JSON解析中data不能为nil
            if (error) {
                NSLog(@"错误信息 %@", error);
            }else {
                //json解析
                NSError *jError = nil;
                id result =[ NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&jError];
                if (jError) {
                    NSLog(@"解析错误: %@", jError);
                }else{
                    //像外部返回json数据
                    
                    netBlock(result);
                }
            }
        });
    }];
    [task resume];


    //封装
    //把重复的代码只写一次 以后反复使用
    //封装得原因:
    //1. 简化代码(偷懒)
    //2. 提高代码的扩展性 和可重用性
    
    //封装的标志
    // 想要复制粘贴 /重复出现的代码
    
    //封装的方式
    //1.方法封装(自适应cell高度)
    //重复代码写在一个方法里 当前类/相关联类中使用
    
    //2.类封装(网络请求/ model类)
    //重复代码写在类中 多个代码/多个工程中使用
    
    //3.类目封装(字符串道具 / 获取拼音)
    //已经存在的类(系统类)写扩展
    
    //封装的要求
    //1.内存管理
    //2.返回值 /参数 哪些是必须  / 哪些是不必须
    //3.安全性 自身保证不会出问题
    //4.扩展性 封装是一个长期提高优化的方式
    
}
@end
